
/**
 * 暴力解法：遍历一遍数组，找到最小值
 * 时间复杂度：O(n)
 * 空间复杂度：O(1)
 */
int findMin_1(int* nums, int numsSize) {
    int minVal = nums[0];
    for (int i = 1; i < numsSize; i++) {
        minVal = fmin(minVal, nums[i]);
    }
    return minVal;
}

/**
 * 暴力解法：遍历数组，但是找到了比前一位小的数字，就是最小值
 * 时间复杂度：O(n)
 * 空间复杂度：O(1)
 */
int findMin_2(int* nums, int numsSize) {
    for (int i = 1; i < numsSize; i++) {
        if (nums[i] < nums[i - 1]) {
            return nums[i];
        }
    }
    return nums[0];
}

/**
 * 二分查找
 * 时间复杂度是： O(logn)
 * 空间复杂度是：O(1)
 */
int findMin(int* nums, int numsSize) {
     int left = 0;
    int right = numsSize - 1;
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] > nums[right]) {
            left = mid + 1;
        } else {
            right = mid;
        }
    }
    return nums[left];
}